package com.example.student.mapper;
import com.example.student.pojo.Score;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 学生成绩管理
 * @author 34082
 */
@Mapper
public interface ScoreMapper {


    /**
     *
     * 根据班级id查询学生成绩
     * @param id  班级id
     */
    @Delete("delete from student_scores where student_number = #{id}")
    void deleteById(Integer id);

    /**
     *
     * 根据学生id查询学生成绩
     * @param id 学生id
     * @return Score
     */
    @Select("select * from student_scores where student_number = #{id}")
    Score getById(Integer id);

    /**
     * 更新学生成绩
     * @param score 学生成绩
     */
    @Update("update student_scores set name = #{name},chinese=#{chinese},math=#{math},english =#{english},java=#{java},sports=#{sports},update_time = #{updateTime},total=#{total} where student_number = #{studentNumber}")
    void update(Score score);

    /**
     * 查询学生成绩总数
     * @return long
     */
    @Select("select count(*) from student_scores")
    long count();

    /**
     *  分页查询学生成绩
     * @param start 起始位置
     * @param pageSize 每页大小
     * @return List<Score>
     */
    @Select("select * from student_scores order by student_number limit #{start},#{pageSize}")
    List<Score> page(Integer start,Integer pageSize);



    /**
     *  根据学生id和姓名查询学生成绩总数
     * @param studentNumber 学生id
     * @param name 学生姓名
     * @return long
     */
    long counts(Integer studentNumber, String name);

    /**
     * 根据学生id和姓名分页查询学生成绩
     * @param start 起始位置
     * @param pageSize 每页大小
     * @param studentNumber 学生id
     * @param name 学生姓名
     * @return  List<Score>
     */
    List<Score> pages(Integer start, Integer pageSize, Integer studentNumber, String name);

    /**
     * 根据班级id查询学生成绩总数
     * @param deptId 班级id
     * @return long
     */
    @Select("select count(*) " +
            "from student_scores " +
            "join students on student_scores.student_number = students.student_id " +
            "WHERE students.dept_id = #{deptId}")
    long classCounts(Integer deptId);

    /**
     *  根据班级id分页查询学生成绩
     * @param start 起始位置
     * @param pageSize 每页大小
     * @param deptId 班级id
     * @return List<Score>
     */
    @Select("select student_scores.* " +
            "from student_scores " +
            "join students on student_scores.student_number = students.student_id " +
            "where students.dept_id = #{deptId} " +
            "limit #{start}, #{pageSize}")
    List<Score> classPages(Integer start,Integer pageSize,Integer deptId);

    /**
     *  根据学生id查询学生成绩排名
     * @param start 起始位置
     * @param pageSize 每页大小
     * @return List<Score>
     */
    @Select("select * from student_scores order by total desc limit #{start},#{pageSize}")
    List<Score> rankPage(Integer start, Integer pageSize);

}
